/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.svh.Servicios;

import com.svh.Dao.DetallePedidoDao;
import com.svh.Dao.Impl.DetallePedidoDaoImpl;
import com.svh.Dao.Impl.PedidoDaoImpl;
import com.svh.Dao.Impl.SubTipoProductoMarcaDaoImpl;
import com.svh.Dao.PedidoDao;
import com.svh.Dao.SubTipoProductoMarcaDao;
import com.svh.Entidad.DetallePedido;
import com.svh.Entidad.Pedido;
import com.svh.Entidad.SubtipoProductoMarca;
import com.svh.Hibernate.HibernateConexion;
import com.svh.Utils.IConexion;
import com.svh.Utils.Utilitario;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
public class PedidoServicio {
    PedidoDao<Pedido> daoPedido;
    DetallePedidoDao<DetallePedido> daoDetalle;
    SubTipoProductoMarcaDao<SubtipoProductoMarca> daoSubTipo;
    IConexion conexion;

    public PedidoServicio() {
        conexion = new HibernateConexion();
        daoPedido = new PedidoDaoImpl(conexion);
        daoSubTipo = new SubTipoProductoMarcaDaoImpl(conexion);
        daoDetalle = new DetallePedidoDaoImpl(conexion);
    }
    
    public void registrarPedido(Pedido pedido, List<DetallePedido> detalles){
        conexion.beginTransaccion();
        daoPedido.agregar(pedido);
        detalles = cargarPedidos(pedido, detalles);
        pedido.setDetallesPedidos(new HashSet<DetallePedido>(detalles));
        for(DetallePedido Rdetalle : detalles)
        {
            daoDetalle.agregar(Rdetalle);
        }
        Utilitario.enviarMensajeGlobalValido("Se ha registrado correctamente");
        conexion.closeTransaccion();
    }
    
    public void actualizarPedido(Pedido pedido, List<DetallePedido> detalles , String mensaje)
    {
        conexion.beginTransaccion();
        for(DetallePedido Fdetalle : pedido.getDetallesPedidos())
        {
            daoDetalle.eliminar(Fdetalle);
        }
        if(detalles != null){
            detalles = cargarPedidos(pedido, detalles);
            pedido.setDetallesPedidos(new HashSet<DetallePedido>(detalles));
        }
        for(DetallePedido Adetalle : pedido.getDetallesPedidos())
        {
            Adetalle.setId(null);
            daoDetalle.agregar(Adetalle);
        }
        daoPedido.actualizar(pedido);
        Utilitario.enviarMensajeGlobalValido(mensaje);
        conexion.closeTransaccion();
    }
    
    public void actualizarPedido(Pedido pedido, String mensaje)
    {
        actualizarPedido(pedido, null,mensaje);
    }
    
    public Pedido obtenerPedido(Integer id)
    {
        Pedido pedido = null;
        conexion.beginConexion();
        pedido = daoPedido.buscarPorId(Pedido.class, id);
        System.out.println("OPedod "+pedido.getId());
        List<DetallePedido> detalles = daoDetalle.getdetallesPorPedido(pedido);
        pedido.setDetallesPedidos(new HashSet<DetallePedido>(detalles));
        conexion.closeConexion();
        return pedido;
    }
    
    private List<DetallePedido> cargarPedidos(Pedido pedido, List<DetallePedido> detalles){
        for(DetallePedido detalle : detalles){
            detalle.setPedido(pedido);
        }
        return detalles;
    }
    
    
    public boolean esValido()
    {
        boolean resultado = true;
        conexion.beginConexion();
        if(!resultado){
            conexion.closeConexion();
        }
        return resultado;
    }
    
    
    
    
}
